package com.zdp.leetcodeMiddle;


import com.zdp.util.ListNode;

/*
* 题目描述：
* 给定一个排序链表，删除所有含有重复数字的节点，只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
* */
public class 删除排序链表中的重复元素II_82 {
    public static void main(String[] args) {
        删除排序链表中的重复元素II_82 demo = new 删除排序链表中的重复元素II_82();
        ListNode listNode = ListNode.createListNode(1, 1);
        ListNode listNode1 = demo.deleteDuplicates(listNode);
        ListNode.staticSoutList(listNode1);
    }

    public ListNode deleteDuplicates(ListNode head) {

        ListNode p = head;
        ListNode pre = null;
        ListNode tt = null;
        while(p!=null){
            tt = pre;
            pre = p;
            p = p.next;
            if(p!=null){
                // 开始判断
                int flag = 0;
                while(p != null && pre.val == p.val){
                    flag ++;
                    // 如果相等的话 就删除
                    pre.next = p.next;
                    p = p.next;
                }
                if(flag !=0){
                    // 开始删除自身
                    if(pre == head){
                        head = p;
                    }else{
                        tt.next = p;
                        pre = tt;
                    }
                }
            }
        }
        return head;
    }
}
